package com.admin.service;

import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.admin.bean.BillingBean;
import com.admin.bean.ProductBean;
import com.admin.dao.MobileProductDao;
import com.admin.dao.ProductDao;

@Service
public class ProductService {

	@Autowired private ProductDao productDao;
	@Autowired private BillingService billingService;
	@Autowired private MobileProductDao mobileProductDao;
	
	/**
	 * 添加新的产品
	 * @param product
	 * @return
	 */
	public int insertProduct(String productName){
		return productDao.insertProduct(productName);
	}
	
	/**
	 * 分页查询产品
	 * @return
	 * @throws SQLException
	 */
	public List<ProductBean> findProduct(int start,int pageSize){
		try {
			return productDao.findProduct(start, pageSize);
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 查询所有的产品
	 * @return
	 * @throws SQLException
	 */
	public List<ProductBean> findAllProduct(){
		try {
			return productDao.findAllProduct();
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 统计产品总数
	 * @return
	 */
	public int findCount(){
		return productDao.findCount();
	}
	
	/**
	 * 根据ID获取产品信息
	 * @param productId
	 * @return
	 * @throws SQLException
	 */
	public ProductBean findProductById(int productId){
		try {
			return productDao.findProductById(productId);
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 删除产品
	 * @param productId
	 * @return
	 * @throws SQLException 
	 */
	public int delProduct(int productId) {
		try{
			List<BillingBean> billingList = billingService.findBillingByProductId(productId);
			if(billingList!=null&&billingList.size()>0){
				//取该产品所有的计费点
				for(BillingBean billing : billingList){
					billingService.delBilling(billing.getBillingId());		//删除计费点
				}
			}
			mobileProductDao.delByProductId(productId);	//删除产品与机型的关系
			productDao.delProduct(productId);			//删除产品
			return 1;
		}catch(RuntimeException e){
			return 0;
		}
	}
	
	/**
	 * 更新产品
	 * @param product
	 * @return
	 */
	public int updateProduct(ProductBean product){
		try{
			billingService.updateProductName(product.getProductId(),product.getProductName());
			productDao.updateProduct(product);
			return 1;
		}catch(RuntimeException e){
			return 0;
		}
	}
}
